/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package propres;
import java.util.*;
/**
 *
 * @author neochange
 */
public class CtrlDominioCliente extends CtrlDominioPersona
{
    // El controlador de Dominio gestiona las operaciones del programa y
// controla las llamadas al controlador de vistas y el de datos
    private estrucliente T;
    private cliente per;
    private g_disco gestor;
   
    
public CtrlDominioCliente(){
T= new estrucliente();
per = new cliente();
gestor = new g_discop();
}
    
// Métodos:    

public void Alta_Persona(String[] fields) throws Exception
{

per = new cliente();
per.Set_Nombre(fields[0]);
per.Set_Apellidos(fields[1]);
per.Set_DNI(Integer.parseInt(fields[2]));
per.Set_Domicilio(fields[3]);
T.añadir_cliente(per);

}

public String[] Consultar_Persona(String DNI)
{
  //  Persona a = (Persona)T.buscar_cliente(Integer.parseInt(DNI));
    String[] U = new String[4];
    
    per = T.buscar_cliente(Integer.parseInt(DNI));
    
    if(per!=null){ // el cliente se encuentra en la estructura ?
    U[0]=per.Get_Nombre();
    U[1]=per.Get_Apellidos();
    U[2]=Integer.toString(per.Get_DNI());
    U[3]=per.Get_Domicilio();
    }
    
return U;    
}
public cliente consultar_cliente(String Dni)
{
    return T.buscar_cliente(Integer.parseInt(Dni));
}

public int consultar_dni() // dni del usuario activo
{
    return per.Get_DNI();
}




public void Modificar_Persona(String[] D) throws Exception
{
    
   T.elim_cliente(Integer.parseInt(D[2]));
       
    per.Set_Nombre(D[0]);
    per.Set_Apellidos(D[1]);
    per.Set_Domicilio(D[3]);
   T.añadir_cliente(per); 

}

public void Eliminar_Persona(String Dni) throws Exception
{

T.elim_cliente(Integer.parseInt(Dni));

}

public List<String> listcli() throws Exception
{
List<String> G = new ArrayList();
List<cliente> U = new ArrayList();
U = T.listar_clientes();

int i=0;
String z ="";
while(i<U.size()){
z=U.get(i).Get_DNI()+"  "+U.get(i).Get_Nombre()+"  "+U.get(i).Get_Apellidos()+"  "+U.get(i).Get_Domicilio();    
G.add(z);
i++;
}

return G;
}

public void Cargar_cliente(String path) throws Exception 
{

T = (estrucliente)gestor.llegir_objecte2(path);
    
}

public void Guardar_cliente(String path)throws Exception 
{
  gestor.guardar_objecte2((Object)T,path);
}
    
public preferencias cons_pref(){

return per.Consultar_preferencias();
}

public dieta cons_dieta(){

return per.consultar_dieta();
}

public boolean existe_cliente(String Dni)
{
        if(T.buscar_cliente(Integer.parseInt(Dni))==null) return false;
        else return true;
}

public void set_dieta(dieta d){

    per.set_dieta(d);
}

public String[] comprobacion(String n, String a, String d, String dom,String action)
{
String[] res = new String[4];

if(action.equals("Dar Alta") || action.equals("Modificar Persona")){
    // comprovacion campo nombre
    if(n.isEmpty()){
        res[0]="No se ha rellenado el campo nombre";
    }
    else if(!correcto(n,false)){
        res[0]="El campo Nombre contiene caracteres invalidos(solo permitido _ y @)";
    }
    else{res[0]="ok";}
    
    // comprovacion campo apellido
    if(a.isEmpty()){
        res[1]="No se ha rellenado el campo apellido";
    }
    else if(!correcto(a,false)){
        res[1]="El campo Apellido contiene caracteres invalidos(solo permitido _ y @)";
    }
    else{res[1]="ok";}
    
    // comprovacion campo Dni
    if(d.isEmpty()){
        res[2]="No se ha rellenado el campo Dni";
    }
    else if(!correcto(d,true)){
        res[2]="El campo Dni contiene caracteres diferentes de caracteres numericos";
    }
    else{res[2]="ok";}
    
    // comprovacion campo Domicilio
    if(dom.isEmpty()){
        res[3]="No se ha rellenado el campo Domicilio";
    }
    else if(!correcto(dom,false)){
        res[3]="El campo Domicilio contiene caracteres invalidos(solo permitido _ y @)";
    }
    else{res[3]="ok";}
        
    
}
else if(action.equals("Consultar Persona") || action.equals("Eliminar Persona")){

    res[0]="ok";
    res[1]="ok";
    res[3]="ok";
    
    if(d.isEmpty()){
        res[2]="No se ha rellenado el campo Dni";
    }
    else if(!correcto(d,true)){
        res[2]="El campo Dni contiene caracteres diferentes de caracteres numericos";
    }
    else{res[2]="ok";}

}


return res;    
}

public boolean correcto(String x, boolean nums){
    
    boolean b = true;
    int i = 0;
    while(i < x.length() && b){
        if(!nums){
            if((x.charAt(i)>31 && x.charAt(i)<48) || (x.charAt(i)>57 && x.charAt(i)<64) || (x.charAt(i)>90 && x.charAt(i)<95) || (x.charAt(i)>122 && x.charAt(i)<128)){
            // si el caracter es: (espacio),!,",#,$,%,&,',(,),*,+,,,-,.,/,;,:,<,>,
            //=,?,[,],\,^,{,},|,~,0,1,2,3,4,5,6,7,8,9
            b=false;
            }
        }
        else{
            if(x.charAt(i)>57 || x.charAt(i)<48){
            // solo se permiten valores numericos
            b=false;
            }
        
        }
    i++;
    }
    
return b;
}

}